28d10482dad4c6deab96220e3131ea3d628550ac,regxmllib/src/main/java/com/sandflow/smpte/regxml/dict/importers/RegisterImporter.java,RegisterImporter,fromRegister,#TypesRegister#GroupsRegister#ElementsRegister#,81

Before Change



        /* Handle Types Entries */
        
        for (TypeEntry type : tr.getEntries()) {
            if (!type.getKind().equals(TypeEntry.Kind.LEAF)) {
                continue;
            }

            Definition tdef = null;

            if (TypeEntry.RENAME_TYPEKIND.equals(type.getTypeKind())) {

                tdef = new RenameTypeDefinition();

                ((RenameTypeDefinition) tdef).setRenamedType(new AUID(type.getBaseType()));

            } else if (TypeEntry.INTEGER_TYPEKIND.equals(type.getTypeKind())) {

                tdef = new IntegerTypeDefinition();

                ((IntegerTypeDefinition) tdef).setSigned(type.getTypeQualifiers().contains(TypeEntry.TypeQualifiers.isSigned));

                switch (type.getTypeSize().intValue()) {
                    case 1:
                        ((IntegerTypeDefinition) tdef).setSize(IntegerTypeDefinition.Size.ONE);
                        break;
                    case 2:
                        ((IntegerTypeDefinition) tdef).setSize(IntegerTypeDefinition.Size.TWO);
                        break;
                    case 4:
                        ((IntegerTypeDefinition) tdef).setSize(IntegerTypeDefinition.Size.FOUR);
                        break;
                    case 8:
                        ((IntegerTypeDefinition) tdef).setSize(IntegerTypeDefinition.Size.EIGHT);
                        break;
                    default:
                        throw new Exception("Illegal Type Size.");

                }

            } else if (TypeEntry.FLOAT_TYPEKIND.equals(type.getTypeKind())) {

                tdef = new FloatTypeDefinition();

                switch (type.getTypeSize().intValue()) {
                    case 2:
                        ((FloatTypeDefinition) tdef).setSize(FloatTypeDefinition.Size.HALF);
                        break;
                    case 4:
                        ((FloatTypeDefinition) tdef).setSize(FloatTypeDefinition.Size.SINGLE);
                        break;
                    case 8:
                        ((FloatTypeDefinition) tdef).setSize(FloatTypeDefinition.Size.DOUBLE);
                        break;
                    default:
                        throw new Exception("Illegal Type Size.");

                }

            } else if (TypeEntry.LENSSERIALFLOAT_TYPEKIND.equals(type.getTypeKind())) {

                tdef = new LensSerialFloatTypeDefinition();

            } else if (TypeEntry.RECORD_TYPEKIND.equals(type.getTypeKind())) {

                tdef = new RecordTypeDefinition();

                for (TypeEntry.Facet tchild : type.getFacets()) {
                    Member m = new Member();

                    m.setName(tchild.getSymbol());

After Change


        /* Handles Group Entries */
        for (GroupsRegister.Entry group : gr.getEntries()) {

            if (group.getKind().equals(GroupsRegister.Entry.Kind.NODE)) {
                continue;
            }

            /* Skip class 14 and 15 */
            if (group.getUL().isClass14() || group.getUL().isClass15()) {
                continue;
            }

            /* Skip groups that do not have a local set representation locat set groups */
            if (!group.getKlvSyntax().contains((byte) 0x53)) {
                continue;
            }

            ClassDefinition cdef = new ClassDefinition();

            if (group.isConcrete() != null) {
                cdef.setConcrete(group.isConcrete());
            } else {
                cdef.setConcrete(true);
            }

            cdef.setDescription(group.getDefinition());

            cdef.setName(group.getName());

            cdef.setSymbol(group.getSymbol());

            cdef.setNamespace(group.getNamespaceName());

            if (group.getParent() != null) {
                cdef.setParentClass(new AUID(group.getParent()));
            }

            cdef.setIdentification(new AUID(group.getUL()));

            for (GroupsRegister.Entry.Record child : group.getContents()) {

                AUID id = new AUID(child.getItem());

                PropertyDefinition pdef = null;

                if (defIDs.contains(id)) {

                    /* if the property has already been added, e.g. BodySID, create an alias */
                    PropertyAliasDefinition padef = new PropertyAliasDefinition();

                    padef.setOriginalProperty(id);

                    pdef = padef;

                } else {

                    pdef = new PropertyDefinition();

                }

                pdef.setIdentification(id);
                pdef.setOptional(child.getOptional());

                if (child.getUniqueID() != null) {
                    pdef.setUniqueIdentifier(child.getUniqueID());
                }
                pdef.setLocalIdentification((int) (child.getLocalTag() == null ? 0 : child.getLocalTag()));

                /* retrieve the element */
                ElementsRegister.Entry element = er.getEntryByUL(child.getItem());

                if (element == null) {
                    LOGGER.warning(String.format(
                            "Undefined Element %s for Group %s",
                            child.getItem(),
                            group.getUL()
                    )
                    );

                    continue;
                }

                pdef.setDescription(element.getDefinition());

                pdef.setName(element.getName());

                pdef.setSymbol(element.getSymbol());

                if (element.getTypeUL() == null) {
                    LOGGER.warning(String.format(
                            "Missing Type UL at Element %s for Group %s",
                            child.getItem(),
                            group.getUL()
                    )
                    );

                    continue;
                }

                pdef.setType(new AUID(element.getTypeUL()));

                pdef.setMemberOf(cdef.getIdentification());

                pdef.setNamespace(element.getNamespaceName());

                defs.add(pdef);
                defIDs.add(pdef.getIdentification());
            }

            defs.add(cdef);
            defIDs.add(cdef.getIdentification());
        }

        /* Handle Types Entries */
        
        for (com.sandflow.smpte.register.TypesRegister.Entry type : tr.getEntries()) {
            if (!type.getKind().equals(com.sandflow.smpte.register.TypesRegister.Entry.Kind.LEAF)) {
                continue;
            }

            Definition tdef = null;

            if (com.sandflow.smpte.register.TypesRegister.Entry.RENAME_TYPEKIND.equals(type.getTypeKind())) {

                tdef = new RenameTypeDefinition();

                ((RenameTypeDefinition) tdef).setRenamedType(new AUID(type.getBaseType()));

            } else if (com.sandflow.smpte.register.TypesRegister.Entry.INTEGER_TYPEKIND.equals(type.getTypeKind())) {

                tdef = new IntegerTypeDefinition();

                ((IntegerTypeDefinition) tdef).setSigned(type.getTypeQualifiers().contains(com.sandflow.smpte.register.TypesRegister.Entry.TypeQualifiers.isSigned));

                switch (type.getTypeSize().intValue()) {
                    case 1:
                        ((IntegerTypeDefinition) tdef).setSize(IntegerTypeDefinition.Size.ONE);
                        break;
                    case 2:
                        ((IntegerTypeDefinition) tdef).setSize(IntegerTypeDefinition.Size.TWO);
                        break;
                    case 4:
                        ((IntegerTypeDefinition) tdef).setSize(IntegerTypeDefinition.Size.FOUR);
                        break;
                    case 8:
                        ((IntegerTypeDefinition) tdef).setSize(IntegerTypeDefinition.Size.EIGHT);
                        break;
                    default:
                        throw new Exception("Illegal Type Size.");

                }

            } else if (com.sandflow.smpte.register.TypesRegister.Entry.FLOAT_TYPEKIND.equals(type.getTypeKind())) {

                tdef = new FloatTypeDefinition();

                switch (type.getTypeSize().intValue()) {
                    case 2:
                        ((FloatTypeDefinition) tdef).setSize(FloatTypeDefinition.Size.HALF);
                        break;
                    case 4:
                        ((FloatTypeDefinition) tdef).setSize(FloatTypeDefinition.Size.SINGLE);
                        break;
                    case 8:
                        ((FloatTypeDefinition) tdef).setSize(FloatTypeDefinition.Size.DOUBLE);
                        break;
                    default:
                        throw new Exception("Illegal Type Size.");

                }

            } else if (com.sandflow.smpte.register.TypesRegister.Entry.LENSSERIALFLOAT_TYPEKIND.equals(type.getTypeKind())) {

                tdef = new LensSerialFloatTypeDefinition();

            } else if (com.sandflow.smpte.register.TypesRegister.Entry.RECORD_TYPEKIND.equals(type.getTypeKind())) {

                tdef = new RecordTypeDefinition();

                for (com.sandflow.smpte.register.TypesRegister.Entry.Facet tchild : type.getFacets()) {
                    Member m = new Member();

                    m.setName(tchild.getSymbol());
                    m.setType(new AUID(tchild.getType()));

                    ((RecordTypeDefinition) tdef).addMember(m);
                }

            } else if (com.sandflow.smpte.register.TypesRegister.Entry.FIXEDARRAY_TYPEKIND.equals(type.getTypeKind())) {

                tdef = new FixedArrayTypeDefinition();

                ((FixedArrayTypeDefinition) tdef).setElementType(new AUID(type.getBaseType()));

                ((FixedArrayTypeDefinition) tdef).setElementCount(type.getTypeSize().intValue());

            } else if (com.sandflow.smpte.register.TypesRegister.Entry.ARRAY_TYPEKIND.equals(type.getTypeKind())) {

                tdef = new VariableArrayTypeDefinition();
                ((VariableArrayTypeDefinition) tdef).setElementType(new AUID(type.getBaseType()));

            } else if (com.sandflow.smpte.register.TypesRegister.Entry.SET_TYPEKIND.equals(type.getTypeKind())) {

                tdef = new SetTypeDefinition();
                ((SetTypeDefinition) tdef).setElementType(new AUID(type.getBaseType()));

            } else if (com.sandflow.smpte.register.TypesRegister.Entry.INDIRECT_TYPEKIND.equals(type.getTypeKind())) {

                tdef = new IndirectTypeDefinition();

            } else if (com.sandflow.smpte.register.TypesRegister.Entry.OPAQUE_TYPEKIND.equals(type.getTypeKind())) {

                tdef = new OpaqueTypeDefinition();

            } else if (com.sandflow.smpte.register.TypesRegister.Entry.STREAM_TYPEKIND.equals(type.getTypeKind())) {

                tdef = new StreamTypeDefinition();

            } else if (com.sandflow.smpte.register.TypesRegister.Entry.WEAKREF_TYPEKIND.equals(type.getTypeKind())) {

                tdef = new WeakReferenceTypeDefinition();

                if (type.getBaseType() == null) {
                    throw new Exception(
                            String.format(
                                    "Missing base type for Type %s",
                                    type.getUL()
                            )
                    );
                }

                ((WeakReferenceTypeDefinition) tdef).setReferencedType(new AUID(type.getBaseType()));

                /* INFO: skip weak Reference target sets until registers are accurate.
                *        They are not necessary for encoding.
                */
                
                for (TypesRegister.Entry.Facet f : type.getFacets()) {

                    UL ul = null;

                    if (f.getValue() != null) {
                        ul = UL.fromURN(f.getValue());
                    }

                    if (ul == null) {
                        LOGGER.warning(
                                String.format(
                                        "Missing Target Set UL at Type %s",
                                        type.getUL().toString()
                                )
                        );

                        continue;
                    }

                    if (!((WeakReferenceTypeDefinition) tdef).getTargetSet().add(new AUID(ul))) {

                        LOGGER.warning(
                                String.format(
                                        "Duplicate Target Set UL at Type %s",
                                        type.getUL().toString()
                                )
                        );
                    }
                }

            } else if (com.sandflow.smpte.register.TypesRegister.Entry.STRONGREF_TYPEKIND.equals(type.getTypeKind())) {

                tdef = new StrongReferenceTypeDefinition();

                ((StrongReferenceTypeDefinition) tdef).setReferenceType(new AUID(type.getBaseType()));

            } else if (com.sandflow.smpte.register.TypesRegister.Entry.ENUMERATION_TYPEKIND.equals(type.getTypeKind())) {

                if (type.getBaseType().equals(UL.fromURN("urn:smpte:ul:060E2B34.01040101.01030100.00000000"))) {
                    
                    ArrayList<ExtendibleEnumerationTypeDefinition.Element> ecelems = new ArrayList<>();

                    /* NOTE: Facets of Extendible Enumeration Definitions are not imported since
                     *       they are, by definition, extendible. In other words, Extendible
                     *       Enumeration instance are expected to handle UL values that are not
                     *       listed in the register. 
                     */
                    
                    /*
                     for (Facet f : type.getFacets()) {
                     ExtendibleEnumerationTypeDefinition.Element m = new ExtendibleEnumerationTypeDefinition.Element();

                     m.setValue(new AUID(f.getUL()));

                     ecelems.add(m);
                     }*/
                    
                    tdef = new ExtendibleEnumerationTypeDefinition(ecelems);

                } else {

                    ArrayList<EnumerationTypeDefinition.Element> celems = new ArrayList<>();

                    for (TypesRegister.Entry.Facet f : type.getFacets()) {
                        EnumerationTypeDefinition.Element m = new EnumerationTypeDefinition.Element();

                        m.setName(f.getSymbol());